/**
 * 项目名称:super关键字
 *
 * @Author: 夏国倩
 * @Date: 2023/9/8 16:19
 * 1、super是一个关键字，全部小写
 * 2、super和this对比着学
 *     this：
 *     this能出现在构造方法和实例方法中
 *     this的语法：this.  this()
 *     this不能使用在静态方法中
 *     this大部分可以省略（区分局部变量和实例变量时不能省略）
 *     public void setName(String name){
 *        this.name=name;
 *        }
 *      this()只能出现在构造方法的第一行，通过当前的构造方法去调用其他的构造方法
 *      目的是：代码复用
 *      super:
 *      super能出现在实例方法和构造方法中
 *      super的语法是：“super.”super()
 *      super大部分情况下是可以省略的
 *      super()只能在构造方法的第一行
 *      创建子类对象的时候，先初始化父类型特征
 *
 *      一个类没有手动提供任何构造方法，系统会默认提供一个无参数构造方法
 *      一个类如果手动提供了一个构造方法，那么无参构造方法系统将不再提供了
 */
package itSuper;
public class SuperTest1 {
    public static void main(String[] args) {
        //A a=new A();
        new B();
    }
}
class A extends Object{
    //无参构造方法
    public A(){
        System.out.println("A类的无参数构造方法");
    }
    //一个类没有手动提供任何构造方法，系统会默认提供一个无参数构造方法
   // 一个类如果手动提供了一个构造方法，那么无参构造方法系统将不再提供了
    public A(int i){
        System.out.println("A类的有参数构造方法");
    }
    public void print(){
        System.out.println("父类在输出");
    }
}
class B extends A{
    public B(){
        //super();//通过子类的构造方法调用父类的构造方法
        //没有super(),默认会有一个super()
        this("zhangsan");
        //super();
        System.out.println("B类的无参数构造方法");
    }
    /*public B(){
       this("张三");
       //super(123);//通过子类的构造方法调用父类的构造方法
       System.out.println("B类的无参数构造方法");
   }*/
    public B(String name){
        this("kk",9);
        //super();
        System.out.println("B类的name-有参数构造方法");
    }
    public B(String name,int i){
        super();
        System.out.println("B类的name-i 有参数构造方法");
    }
    public void print(){
        super.print();
        System.out.println("我是一个。。。。");
    }
}
